package org.example.ref;

import java.io.*;
import java.net.Socket;
import java.nio.charset.Charset;

public class Download {
    public static void main(String[] args) throws Exception {
        // 连接 FTP 服务器
        Socket socket = new Socket("127.0.0.1", 21);

        OutputStream os = socket.getOutputStream();
        InputStream is = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));

        // 连接成功的消息
        String msg;
        do {
            msg = reader.readLine();
            System.out.println(msg);
        } while (!msg.startsWith("220"));

        // 登录
        os.write("USER fyx\r\n".getBytes(Charset.defaultCharset()));
        os.write("PASS 123456\r\n".getBytes(Charset.defaultCharset()));
        do {
            msg = reader.readLine();
            System.out.println(msg);
        } while (!msg.startsWith("230"));

        // 让服务器进入被动模式
        /*
        当客户端在下载/上传文件前，要先发送命令让服务器进入被动模式。服务器会打开数据端口并监听。并返回响应码 227 和数据连接的端口号。
         */
        os.write("PASV\r\n".getBytes(Charset.defaultCharset()));
        do {
            msg = reader.readLine();
            System.out.println(msg);
        } while (!msg.startsWith("227"));

        // 客户端通过被动模式下载文件

        // 获取文件大小
        os.write("SIZE mf.jpeg\r\n".getBytes(Charset.defaultCharset()));
        do {
            msg = reader.readLine();
            System.out.println(msg);
        } while (!msg.startsWith("213"));

        // 下载文件
        os.write("RETR mf.jpeg\r\n".getBytes(Charset.defaultCharset()));

        byte[] buf = new byte[1024];
        FileOutputStream fos = new FileOutputStream("background-ftp.jpeg");
        while (is.read(buf) > 0) {
            System.out.println("copy");

        }



        socket.close();
    }
}
